package gomz.pres.admin;

import gomz.pres.ModelMain;
import gomz.pres.question.CQHexagram;

import javax.swing.JFrame;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

/**
 * Diese Klasse steuert das UI der Hexagrammverwaltung. Es reagiert auf die
 * Eingaben des Benutzers.
 * 
 * @author Murillo
 */
public class CAHexagramadministration {
	// ********************************************************************************
	// Variablen
	// ********************************************************************************
	private MVerwaltung model;
	private ModelMain modelMain;
	private GUIAHexagramadministration view;
	
	//Controller von cQHexagram, die view von GUIQHexagram eingebunden wird
	private CQHexagram cHex;
	
	// ********************************************************************************
	// Getter/Setter
	// ********************************************************************************
	public CQHexagram getcHex() {
		return cHex;
	}

	public void setcHex(CQHexagram cHex) {
		this.cHex = cHex;
	}
	
	// *********************************************************************************
	// Konstruktor
	// ********************************************************************************
	/**
	 * Konstruktor fur den Controller fur die Hexagrammadministration
	 */
	public CAHexagramadministration(JFrame pWindow, GUIAHexagramadministration view, MVerwaltung model) {
		this.model = model;
		this.view = view;

		modelMain = model;
		cHex = new CQHexagram(pWindow, view.getGuiHexagram(), modelMain, 1, true);
		addListener();
	}

	// ********************************************************************************
	// Listener
	// ********************************************************************************
	/**
	 * Diese Methode fuegt die Listener hinzu
	 */
	private void addListener() {
		// Buttons**********************************************************************
		// Hexagrammauswahl
		view.getLiHlist().addListSelectionListener(new ListSelectionListener() {
			public void valueChanged(ListSelectionEvent e) {
				// da das event vorkommt, wenn ein Feld deselektiert wird und wenn es selektiert wird
				if (e.getValueIsAdjusting() == false) {
					doHexagramChange(view.getLiHlist().getSelectedIndex());
				}
			}
		});

	}

	// ********************************************************************************
	// Methoden
	// ********************************************************************************
	/**
	 * Diese Methode fuellt das GUI mit den Daten des uerbgebenen Hexagramms
	 * @param hexIndex Index (aus der Liste) des Hexagramm, welches angezeigt werden soll
	 */
	private void doHexagramChange(int hexIndex) {
		//Hexagramm vom Server hohlen
		model.loadHexagram(model.getAllHex().get(hexIndex).getId());
		//GUI fuellen
		cHex.fillData();
		cHex.setHexLines();
		cHex.doTextChange(view.getGuiHexagram().getLiKlist().getSelectedIndex(), -1);
	}
	
	/**
	 * Diese Methode setzt die Auswahl der Auswahlliste der Textauswahl und der Hexagrammauswahl auf das Element 0,
	 * falls kein Element ausgewaehlt war.
	 */
	public void fillData(){
		if(view.getLiHlist().getSelectedIndex() == -1)	view.getLiHlist().setSelectedIndex(0);
		if(view.getGuiHexagram().getLiKlist().getSelectedIndex() == -1)	view.getGuiHexagram().getLiKlist().setSelectedIndex(0);
	}
	
	/**
	 * Diese Methode setzt die Editierbarkeit des Textfeld mit den Original Hexagramtexten auf true oder false
	 * @param isAdmin Boolean ob das Textfeld mit den Original Hexagramtexten editierbar sein soll
	 */
	public void setOriTextEditable(boolean isAdmin){
		cHex.setOriTextEditable(isAdmin);
	}
}
